﻿import gs.dataTransfer.XMLParser;
import clases.dades.Idioma;
import clases.dades.apartats.ApPortada;
import clases.dades.apartats.portada.EventCalendari;
import clases.dades.apartats.portada.NoticiaPortada;

/**
 * Carrega i parseja XML del apartats portada
 * 
 * @author JDo
 * @version 1.0
 */
class clases.dades.xml.XMLApPortada extends MovieClip{
	private var _Catala  :ApPortada;
	private var _Castella:ApPortada;
	private var _Angles  :ApPortada;
	
	private var _onCarregat  :Function;
	private var _base        :MovieClip;
	
	/**
	 * Constructor
	 * 
	 * @param $xml        XML a carregar i parsejar
	 * @param $onCarregat Funció a cridar quan s'acaba tot el proces
	 * @param $base       MC origen de la crida a la classe
	 */
	public function XMLApPortada($xml:String,$onCarregat:Function,$base:MovieClip){
		_onCarregat = $onCarregat;
		_base       = $base;
		XMLParser.load($xml, xmlCarregat, this);
	}
	
	/**
	 * Carrega de l'XML completa
	 * 
	 * @param $ok        Ens diu si s'ha pogut carregar i parsejar l'XML
	 * @param $resultats Resultat del parseig
	 * @param $xml       XML que s'ha carregat
	 * @param $base      Origen de la crida del parsejador
	 */
	private function xmlCarregat($ok:Boolean, $resultats:Object, $xml:XML, $base:MovieClip):Void {
		$xml = null;
		if ($ok) {
			$base.parsejaResultats($resultats); 
		}
	}
	
	/**
	 * Parsseig de l'XML
	 * 
	 * @param $resultado Resultat del parser per tractar-lo 
	 */
	private function parsejaResultats($resultado:Object):Void{
		_Catala   = new ApPortada();
		
		for(var entrada:Number = 0;entrada<$resultado.entrada.length; entrada++){
			_Catala.addTitol($resultado.entrada[entrada].catala[0].value);
		}
		
		var evObj:EventCalendari;
		for(var event:Number = 0; event<$resultado.calendari[0].concert.length;event++){
			evObj = new EventCalendari();
			evObj.dia   = $resultado.calendari[0].concert[event].num[0].value;
			evObj.mes   = $resultado.calendari[0].concert[event].mes[0].catala[0].value;
			evObj.titol = $resultado.calendari[0].concert[event].titul[0].catala[0].value;
			evObj.lloc  = $resultado.calendari[0].concert[event].lloc[0].value;
			evObj.hora  = $resultado.calendari[0].concert[event].hora[0].value;
			_Catala.addEvent(evObj);
		}
		
		var notiObj:NoticiaPortada;
		for(var noti:Number = 0; noti<$resultado.noticies[0].noticia.length;noti++){
			notiObj = new NoticiaPortada();
			notiObj.titol      = $resultado.noticies[0].noticia[noti].titul[0].catala[0].value;
			notiObj.dia        = $resultado.noticies[0].noticia[noti].dia[0].catala[0].value;
			notiObj.descripcio = $resultado.noticies[0].noticia[noti].desc[0].catala[0].value;
			_Catala.addNoticia(notiObj);
		}
		
		_Castella   = new ApPortada();
		
		for(var entrada:Number = 0;entrada<$resultado.entrada.length; entrada++){
			_Castella.addTitol($resultado.entrada[entrada].castella[0].value);
		}
		
		var evObj:EventCalendari;
		for(var event:Number = 0; event<$resultado.calendari[0].concert.length;event++){
			evObj = new EventCalendari();
			evObj.dia   = $resultado.calendari[0].concert[event].num[0].value;
			evObj.mes   = $resultado.calendari[0].concert[event].mes[0].castella[0].value;
			evObj.titol = $resultado.calendari[0].concert[event].titul[0].castella[0].value;
			evObj.lloc  = $resultado.calendari[0].concert[event].lloc[0].value;
			evObj.hora  = $resultado.calendari[0].concert[event].hora[0].value;
			_Castella.addEvent(evObj);
		}
		
		var notiObj:NoticiaPortada;
		for(var noti:Number = 0; noti<$resultado.noticies[0].noticia.length;noti++){
			notiObj = new NoticiaPortada();
			notiObj.titol      = $resultado.noticies[0].noticia[noti].titul[0].castella[0].value;
			notiObj.dia        = $resultado.noticies[0].noticia[noti].dia[0].castella[0].value;
			notiObj.descripcio = $resultado.noticies[0].noticia[noti].desc[0].castella[0].value;
			_Castella.addNoticia(notiObj);
		}
		
		_Angles   = new ApPortada();
		
		for(var entrada:Number = 0;entrada<$resultado.entrada.length; entrada++){
			_Angles.addTitol($resultado.entrada[entrada].angles[0].value);
		}
		
		var evObj:EventCalendari;
		for(var event:Number = 0; event<$resultado.calendari[0].concert.length;event++){
			evObj = new EventCalendari();
			evObj.dia   = $resultado.calendari[0].concert[event].num[0].value;
			evObj.mes   = $resultado.calendari[0].concert[event].mes[0].angles[0].value;
			evObj.titol = $resultado.calendari[0].concert[event].titul[0].angles[0].value;
			evObj.lloc  = $resultado.calendari[0].concert[event].lloc[0].value;
			evObj.hora  = $resultado.calendari[0].concert[event].hora[0].value;
			_Angles.addEvent(evObj);
		}
		
		var notiObj:NoticiaPortada;
		for(var noti:Number = 0; noti<$resultado.noticies[0].noticia.length;noti++){
			notiObj = new NoticiaPortada();
			notiObj.titol      = $resultado.noticies[0].noticia[noti].titul[0].angles[0].value;
			notiObj.dia        = $resultado.noticies[0].noticia[noti].dia[0].angles[0].value;
			notiObj.descripcio = $resultado.noticies[0].noticia[noti].desc[0].angles[0].value;
			_Angles.addNoticia(notiObj);
		}
		
		_onCarregat(_base);
	}
	
	/**
	 * Ens dona les dades del idioma corresponent
	 * 
	 * @param $id Identificador del idioma a retornar
	 * @return ApGeneric
	 * @see clases.dades.apartats.ApGeneric
	 */
	public function getIdioma($id:Number):ApPortada{
		switch($id){
			case Idioma.CATALA:
				return _Catala;
			break;
			
			case Idioma.CASTELLA:
				return _Castella;
			break;
			
			case Idioma.ANGLES:
				return _Angles;
			break;
		}
	}
}